package com.learn.simplefactory;

public class PetFactory {

    // 1
//    public static IPet create(String className){
//        if ("dog".equals(className)) {
//            return new Dog();
//        }else if ("cat".equals(className)) {
//            return new Cat();
//        }else {
//            return null;
//        }
//    }

    // 2
//    public static IPet create(String className){
//        try {
//            return (IPet)Class.forName(className).newInstance();
//        } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
//            e.printStackTrace();
//        }
//        return null;
//    }

    // 3
//    public static IPet create(Class<? extends IPet> clazz){
//        try {
//            return clazz.newInstance();
//        } catch (InstantiationException | IllegalAccessException e) {
//            e.printStackTrace();
//        }
//        return null;
//    }

    // 4
    public static <T extends IPet> T create(Class<T> clazz){
        try {
            return clazz.newInstance();
        } catch (InstantiationException | IllegalAccessException e) {
            e.printStackTrace();
        }
        return null;
    }
}
